ActiveForm a pohyb kurzoru
Otázka od: jan.slama@t-email.cz
1. 11. 2002 3:09
Zdravim vas,
Vytvarim modularni aplikaci, kazdy modul je jedno OCX s ActiveForm. Tyto
ActiveFormy pak vkladam dynamicky do zalozek na formulari.
Vse funguje dobre az na "maly" detail. Uvnitr ActivFormu nefunguji v editacnich
polich SIPKY DOLEVA A DOPRAVA!!!, klavesa TAB a posun koleckem mysi u
scrollbaru.
Bohuzel tuto vlastnost jsem zjistil az uz jsem mel vse navrzeno jako COM a
ActiveX. Tato zdanliva malickost bude pro uzivatele naprosto zasadni a urcite
me "s aplikaci, kde nefunguje ani pohyb kurzoru" posle do haje (a nebude ho
zajimat, ze je to koncepcne navrzene pomoci technologie COM)
Muzete mi nejak poradit, setkali jste se s tim? V archivu konference jsem nasel
nejake zminky o podobnem problemu (Petr Vones), ale myslim, ze se to tenkrat
nejak uspokojive nevyresilo. Neprisli jste od te doby na neco?
Diky za vase napady, Honza Slama
Odpovedá: Zbysek Hlinka
1. 11. 2002 8:30
On 1 Nov 2002 at 2:42, jan.slama@t-email.cz wrote:
> Vytvarim modularni aplikaci, kazdy modul je jedno OCX s ActiveForm.
> Tyto ActiveFormy pak vkladam dynamicky do zalozek na formulari.
Myslim, ze by bylo lepsi, kdyby si COM otevrel sve vlastni okno,
misto vkladani do okna ciziho.
S pozdravem
Zbysek Hlinka
E-mail: hlinka@hlinka.cz, localizator@localizator.com
Phone: +420 603 551 282
Odpovedá: Alexandr Stefek
1. 11. 2002 10:40
>
> Vse funguje dobre az na "maly" detail. Uvnitr ActivFormu nefunguji v
editacnich polich SIPKY DOLEVA A DOPRAVA!!!, klavesa TAB a posun koleckem
mysi u scrollbaru.
>
Nejdrive vytvoreni AcX za behu pod FActiveFormX: TActiveFormX;
procedure TForm1.FormCreate(Sender: TObject);
begin
FActiveFormX := TActiveFormX.Create(Self);
FActiveFormX.Parent := Self;
FActiveFormX.Left := 10;
FActiveFormX.Align := alClient;
FActiveFormX.TabStop := True;
end;
a nyni specialni zpracovani zprav zavesene na TApplicationEvents:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
OleInPlaceActiveObject: IOleInPlaceActiveObject;
begin
if Msg.message = WM_KEYDOWN then begin
if Msg.wParam in [9, 37..40] then begin
OleInPlaceActiveObject := FActiveFormX.DefaultInterface as
IOleInPlaceActiveObject;
OleInPlaceActiveObject.TranslateAccelerator(Msg);
end;
if Screen.ActiveControl = FActiveFormX then
Handled := Msg.wParam in [9, 37..40]
else
Handled := Msg.wParam in [37..40];
end;
end;
Ale je to takove moc rychle, urcite to pujde udelat lepe, nicmene je to
celkem
rychle reseni nouzove situace.
Alexandr STEFEK